package com.witsight.cassandra.dao;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.datastax.driver.core.BoundStatement;
import com.datastax.driver.core.PreparedStatement;
import com.witsight.platform.util.lang.ObjectUtil;

/**   
 * 说明：自定义BoundStatement
 * @Title: CustomBoundStatement.java 
 * @Package com.witsight.cassandra.dao 
 * @See: {@link BoundStatement}
 * Copyright: Copyright (c) 2017
 * Company:sany huax witsight team by product
 * @author: penght  
 * @date: 2017年9月28日 下午2:12:55 
 * @version: V1.0
 *
 */
public class CustomBoundStatement extends BoundStatement {
	/**
	 * 
	 * 说明：构造函数 
	 * @Title:CustomBoundStatement.java
	 * @See: {@link #CustomBoundStatement(PreparedStatement)}
	 * @param preparedStatement 前致Statement
	 * @date 2016年12月5日 上午10:16:04
	 */
	public CustomBoundStatement(PreparedStatement preparedStatement) {
		super(preparedStatement);
	}
	/**
	 * 
	 * 说明：设置Cql的参数变量
	 * @Title: set
	 * @See: {@link #set(String, Object)}
	 * @author penght
	 * @param name CQL名称 key
	 * @param v 值
	 * @return BoundStatement
	 * @date: 2016年12月5日 上午10:16:44
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public <V> BoundStatement set(String name, V v) {
		if (v instanceof Long){
			return this.setLong(name, (Long)v);
		} else if (v instanceof Integer){
			return this.setInt(name, (Integer)v);
		} else if (v instanceof Double){
			return this.setDouble(name, (Double) v);
		} else if (v instanceof Float){
			return this.setFloat(name, (Float) v);
		} else if (v instanceof Date){
			return this.setTimestamp(name, (Date) v);
		} else if (v instanceof Boolean){
			return this.setBool(name,(Boolean) v);
		} else if (v instanceof BigDecimal){
			return this.setDecimal(name, (BigDecimal)v);
		} else if (v instanceof Byte){
			return this.setByte(name,(Byte) v);
		} else if (v instanceof List){
			return this.setList(name, (List) v);
		} else if (v instanceof Set){
			return this.setSet(name, (Set) v);
		} else if (v instanceof Map){
			return this.setMap(name, (Map) v);
		} else {
			return this.setString(name, ObjectUtil.getDisplayString(v));
		}	
	}
}
